/*
Copyright (C) 2009  Raymond Jeon
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/


#include "gl_lib_include.h"
#include "gl_mail_log.h"
#include "gl_smtp_command.h"
#include "gl_smtp_func.h"
#include "gl_smtp_response.h"






////////////////////////////////////////////////////////////////////////////////
//	Date : 2003-3-7
//	Update : 
//	Author : Raymond Jeon
//	Parameters
//	Return Value  
//	Remarks 
////////////////////////////////////////////////////////////////////////////////

void GlSmtpCommandFuncCall(glsmtpsession_ *gsn)
{
	char			*pArg;
	glcommand_		*pCommand;

	
	pCommand = GlGetCommandStream(gsn->stream, GlSmtpCommand, &pArg);
	
	if (pCommand)
	{
		if (pCommand->iStat > gsn->iStat)
		{
			GlSocketStreamPrintStrLnLog(gsn->stream, GlLogSmtp, SMTP_RES_NEEDHELO);
			GLETRACE(SMTP_RES_NEEDHELO);
			return;
		}
		if (pCommand->bArgs && !__VAL(pArg))
		{
			GlSocketStreamPrintStrLnLog(gsn->stream, GlLogSmtp, SMTP_RES_ARGUMENT_ERROR);
			GLETRACE(SMTP_RES_ARGUMENT_ERROR);
			return;
		} 

		pCommand->func(gsn, pArg);
	} 
	else
	{
		GlSocketStreamPrintStrLnLog(gsn->stream, GlLogSmtp, SMTP_RES_UNKNOWN_SYNTEX);
		GLETRACE(SMTP_RES_UNKNOWN_SYNTEX);
	}
}

